ИМ. М.В.ЛОМОНОСОВА ФАКУЛЬТЕТ ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ И КИБЕРНЕТИКИ Д.С.Ватолин Алгоритмы cжатия изображений Методическое пособие Скачать это пособие в виде WORD файла (1.3Мб) |
Содержание
|
УДК 681.3
Ватолин Д.С. Алгоритмы сжатия изображений. Методическое пособие. Пособие знакомит с основными понятиями сжатия изображений, базовыми алгоритмами и современными направлениями развития теории сжатия изображений. Пособие можно рассматривать как практическое руководство. Оно рассчитано на читателей, знакомых с языком программирования C++ и имеющих представление о базовых алгоритмах. Рекомендуется студентам, аспирантам, научным сотрудникам и инженерам весьма широкого круга специальностей. Рецензенты: Кумсков М.И., д.ф.-м.н. Печатается по решению Редакционно-Издательского Совета факультета Вычислительной Математики и Кибернетики Московского Государственного Университета им. М.В. Ломоносова ISBN 5-89407-041-4 (с) 1999 Лаборатория Компьютерной Графики ВМиК МГУ им. М.В. Ломоносова |
Предисловие
Спецкурс “Машинная графика-2” читается на факультете ВМиК МГУ уже более 10 лет. Являясь логическим продолжением общего курса “Машинная графика”, спецкурс более углубленно и детально рассматривает многие аспекты этой интересной области. В основную программу курса входит широкий круг вопросов: от графических примитивов до построения фотореалистичных изображения. В этом пособии детально рассматриваются алгоритмы сжатия изображений. При этом изложены классические, давно известные алгоритмы, такие как групповое кодирование, LZW сжатие, кодирование по Хаффману. Рассмотрен в рамках курса и сравнительно недавно появившийся алгоритм JPEG. Отдельное внимание уделено новым алгоритмам, таким как рекурсивное сжатие и фрактальное сжатие изображений. Рассмотрены вопросы корректного сравнения алгоритмов компрессии изображений и вопросы построения мер оценки потерь качества изображения. Сейчас в стадии подготовки находится гипертекстовый вариант этого пособия, который будет выложен на сайте нашей курса по адресу http://graphics.cs.msu.su/ Ю.М. Баяковский 13.11.98 |
Алгоритм Хаффмана с фиксированной таблицей CCITTGroup 3
Близкая модификация алгоритма используется при сжатии черно-белых изображений (один бит на пиксел). Полное название данного алгоритма CCITT Group 3. Это означает, что данный алгоритм был предложен третьей группой по стандартизации Международного Консультационного Комитета по Телеграфии и Телефонии (Consultative Committee International Telegraph and Telephone). Последовательности подряд идущих черных и белых точек в нем заменяются числом, равным их количеству. А этот ряд, уже в свою очередь, сжимается по Хаффману с фиксированной таблицей. Определение: Набор идущих подряд точек изображения одного цвета называется серией.Длина этого набора точек называется длиной серии. В таблице, приведенной ниже, заданы два вида кодов:
На практике в тех случаях, когда в изображении преобладает черный цвет, мы инвертируем изображение перед компрессией и записываем информацию об этом в заголовок файла. Алгоритм компрессии выглядит так: for(по всем строкам изображения) {
Поскольку черные и белые серии чередуются, то реально код для белой и код для черной серии будут работать попеременно. В терминах регулярных выражений мы получим для каждой строки нашего изображения (достаточно длинной, начинающейся с белой точки) выходной битовый поток вида: ((<Б-2560>)*[<Б-сст.>]<Б-зв.>(<Ч-2560>)*[<Ч-сст.>]<Ч-зв.>)+ [(<Б-2560>)*[<Б-сст.>]<Б-зв.>] Где ()* — повтор 0 или более раз, ()+.— повтор 1 или более раз, [] — включение 1 или 0 раз. Для приведенного ранее примера: 0, 3, 556, 10... алгоритм сформирует следующий код: <Б-0><Ч-3><Б-512><Б-44><Ч-10>, или, согласно таблице, 001101011001100101001011010000100 (разные коды в потоке выделены для удобства). Этот код обладает свойством префиксных кодов и легко может быть свернут обратно в последовательность длин серий. Легко подсчитать, что для приведенной строки в 569 бит мы получили код длиной в 33 бита, т.е. коэффициент сжатия составляет примерно 17 раз. |
Изображение, для которого очень выгодно применение алгоритма CCITT-3. (Большие области заполнены одним цветом). |
Изображение, для которого менее выгодно применение алгоритма CCITT-3. (Меньше областей, заполненных одним цветом. Много коротких “черных” и “белых” серий). |
Таблица кодов завершения: |
Длина серии |
Код белой подстроки |
Код черной подстроки |
Длина серии |
Код белой подстроки |
Код черной
подстроки | |
0 | 00110101 | 0000110111 | 32 | 00011011 | 000001101010 | |
1 | 00111 | 010 | 33 | 00010010 | 000001101011 | |
2 | 0111 | 11 | 34 | 00010011 | 000011010010 | |
3 | 1000 | 10 | 35 | 00010100 | 000011010011 | |
4 | 1011 | 011 | 36 | 00010101 | 000011010100 | |
5 | 1100 | 0011 | 37 | 00010110 | 000011010101 | |
6 | 1110 | 0010 | 38 | 00010111 | 000011010110 | |
7 | 1111 | 00011 | 39 | 00101000 | 000011010111 | |
8 | 10011 | 000101 | 40 | 00101001 | 000001101100 | |
9 | 10100 | 000100 | 41 | 00101010 | 000001101101 | |
10 | 00111 | 0000100 | 42 | 00101011 | 000011011010 | |
11 | 01000 | 0000101 | 43 | 00101100 | 000011011011 | |
12 | 001000 | 0000111 | 44 | 00101101 | 000001010100 | |
13 | 000011 | 00000100 | 45 | 00000100 | 000001010101 | |
14 | 110100 | 00000111 | 46 | 00000101 | 000001010110 | |
15 | 110101 | 000011000 | 47 | 00001010 | 000001010111 | |
16 | 101010 | 0000010111 | 48 | 00001011 | 000001100100 | |
17 | 101011 | 0000011000 | 49 | 01010010 | 000001100101 | |
18 | 0100111 | 0000001000 | 50 | 01010011 | 000001010010 | |
19 | 0001100 | 00001100111 | 51 | 01010100 | 000001010011 | |
20 | 0001000 | 00001101000 | 52 | 01010101 | 000000100100 | |
21 | 0010111 | 00001101100 | 53 | 00100100 | 000000110111 | |
22 | 0000011 | 00000110111 | 54 | 00100101 | 000000111000 | |
23 | 0000100 | 00000101000 | 55 | 01011000 | 000000100111 | |
24 | 0101000 | 00000010111 | 56 | 01011001 | 000000101000 | |
25 | 0101011 | 00000011000 | 57 | 01011010 | 000001011000 | |
26 | 0010011 | 000011001010 | 58 | 01011011 | 000001011001 | |
27 | 0100100 | 000011001011 | 59 | 01001010 | 000000101011 | |
28 | 0011000 | 000011001100 | 60 | 01001011 | 000000101100 | |
29 | 00000010 | 000011001101 | 61 | 00110010 | 000001011010 | |
30 | 00000011 | 000001101000 | 62 | 00110011 | 000001100110 | |
31 | 00011010 | 000001101001 | 63 | 00110100 | 000001100111 |
Таблица составных кодов:
Длина серии |
Код белой подстроки |
Код черной подстроки |
Длина серии |
Код белой подстроки |
Код черной
подстроки | |
64 | 11011 | 0000001111 | 1344 | 011011010 | 0000001010011 | |
128 | 10010 | 000011001000 | 1408 | 011011011 | 0000001010100 | |
192 | 01011 | 000011001001 | 1472 | 010011000 | 0000001010101 | |
256 | 0110111 | 000001011011 | 1536 | 010011001 | 0000001011010 | |
320 | 00110110 | 000000110011 | 1600 | 010011010 | 0000001011011 | |
384 | 00110111 | 000000110100 | 1664 | 011000 | 0000001100100 | |
448 | 01100100 | 000000110101 | 1728 | 010011011 | 0000001100101 | |
512 | 01100101 | 0000001101100 | 1792 | 00000001000 |
| |
576 | 01101000 | 0000001101101 | 1856 | 00000001100 |
| |
640 | 01100111 | 0000001001010 | 1920 | 00000001101 |
| |
704 | 011001100 | 0000001001011 | 1984 | 000000010010 |
| |
768 | 011001101 | 0000001001100 | 2048 | 000000010011 |
| |
832 | 011010010 | 0000001001101 | 2112 | 000000010100 |
| |
896 | 011010011 | 0000001110010 | 2176 | 000000010101 |
| |
960 | 011010100 | 0000001110011 | 2240 | 000000010110 |
| |
1024 | 011010101 | 0000001110100 | 2304 | 000000010111 |
| |
1088 | 011010110 | 0000001110101 | 2368 | 000000011100 |
| |
1152 | 011010111 | 0000001110110 | 2432 | 000000011101 |
| |
1216 | 011011000 | 0000001110111 | 2496 | 000000011110 |
| |
1280 | 011011001 | 0000001010010 | 2560 | 000000011111 |
|
=>
В худшем случае, если не будет применяться оптимизирующий алгоритм, потребуется перебор и сравнение всех возможных фрагментов изображения разного размера. Даже для небольших изображений при учете дискретности мы получим астрономическое число перебираемых вариантов. Причем, даже резкое сужение классов преобразований, например, за счет масштабирования только в определенное количество раз, не дает заметного выигрыша во времени. Кроме того, при этом теряется качество изображения. Подавляющее большинство исследований в области фрактальной компрессии сейчас направлены на уменьшение времени архивации, необходимого для получения качественного изображения. Далее приводятся основные определения и теоремы, на которых базируется фрактальная компрессия. Этот материал более детально и с доказательствами рассматривается в [3] и в [4]. Определение. Преобразование , представимое в виде где a, b, c, d, e, f действительные числа и называется двумерным аффинным преобразованием. Определение. Преобразование , представимое в виде где a, b, c, d, e, f, p, q, r, s, t, u действительные числа и называется трехмерным аффинным преобразованием. Определение. Пусть — преобразование в пространстве Х. Точка такая, что называется неподвижной точкой (аттрактором) преобразования. Определение. Преобразование в метрическом пространстве (Х, d) называется сжимающим, если существует число s: , такое, что Замечание: Формально мы можем использовать любое сжимающее отображение при фрактальной компрессии, но реально используются лишь трехмерные аффинные преобразования с достаточно сильными ограничениями на коэффициенты. Теорема. (О сжимающем преобразовании) Пусть в полном метрическом пространстве (Х, d). Тогда существует в точности одна неподвижная точка этого преобразования, и для любой точки последовательность сходится к . Более общая формулировка этой теоремы гарантирует нам сходимость. Определение. Изображением называется функция S, определенная на единичном квадрате и принимающая значения от 0 до 1 или Пусть трехмерное аффинное преобразование , записано в виде и определено на компактном подмножестве декартова квадрата [0..1]x[0..1]. Тогда оно переведет часть поверхности S в область , расположенную со сдвигом (e,f) и поворотом, заданным матрицей . При этом, если интерпретировать значение S как яркость соответствующих точек, она уменьшится в p раз (преобразование обязано быть сжимающим) и изменится на сдвиг q. Определение. Конечная совокупность W сжимающих трехмерных аффинных преобразований , определенных на областях , таких, что и , называется системой итерируемых функций (IFS). Системе итерируемых функций однозначно сопоставляется неподвижная точка — изображение. Таким образом, процесс компрессии заключается в поиске коэффициентов системы, а процесс декомпрессии — в проведении итераций системы до стабилизации полученного изображения (неподвижной точки IFS). На практике бывает достаточно 7-16 итераций. Области в дальнейшем будут именоваться ранговыми, а области — доменными. Построение алгоритма Как уже стало очевидным из изложенного выше, основной задачей при компрессии фрактальным алгоритмом является нахождение соответствующих аффинных преобразований. В самом общем случае мы можем переводить любые по размеру и форме области изображения, однако в этом случае получается астрономическое число перебираемых вариантов разных фрагментов, которое невозможно обработать на текущий момент даже на суперкомпьютере. В учебном варианте алгоритма, изложенном далее, сделаны следующие ограничения на области:
Например, для файла в градациях серого 256 цветов 512х512 пикселов при размере блока 8 пикселов аффинных преобразований будет 4096 (512/8x512/8). На каждое потребуется 3.5 байта. Следовательно, если исходный файл занимал 262144 (512х512) байт (без учета заголовка), то файл с коэффициентами будет занимать 14336 байт. Коэффициент архивации — 18 раз. При этом мы не учитываем, что файл с коэффициентами тоже может обладать избыточностью и архивироваться методом архивации без потерь, например LZW. Отрицательные стороны предложенных ограничений:
Сам алгоритм упаковки сводится к перебору всех доменных блоков и подбору для каждого соответствующего ему рангового блока. Ниже приводится схема этого алгоритма. for (all range blocks) { Как видно из приведенного алгоритма, для каждого рангового блока делаем его проверку со всеми возможными доменными блоками (в том числе с прошедшими преобразование симметрии), находим вариант с наименьшей мерой L2 (наименьшим среднеквадратичным отклонением) и сохраняем коэффициенты этого преобразования в файл. Коэффициенты — это (1) координаты найденного блока, (2) число от 0 до 7, характеризующее преобразование симметрии (поворот, отражение блока), и (3) сдвиг по яркости для этой пары блоков. Сдвиг по яркости вычисляется как: , где rij — значения пикселов рангового блока (R), а dij — значения пикселов доменного блока (D). При этом мера считается как: . Мы не вычисляем квадратного корня из L2 меры и не делим ее на n, поскольку данные преобразования монотонны и не помешают нам найти экстремум, однако мы сможем выполнять на две операции меньше для каждого блока. Посчитаем количество операций, необходимых нам для сжатия
изображения в градациях серого 256 цветов 512х512 пикселов при размере
блока 8 пикселов:
Таким образом, нам удалось уменьшить число операций алгоритма компрессии до вполне вычисляемых (пусть и за несколько часов) величин. Схема алгоритма декомпрессии изображений Декомпрессия алгоритма фрактального сжатия чрезвычайно проста. Необходимо провести несколько итераций трехмерных аффинных преобразований, коэффициенты которых были получены на этапе компрессии. В качестве начального может быть взято абсолютно любое изображение (например, абсолютно черное), поскольку соответствующий математический аппарат гарантирует нам сходимость последовательности изображений, получаемых в ходе итераций IFS, к неподвижному изображению (близкому к исходному). Обычно для этого достаточно 16 итераций. Прочитаем из файла коэффициенты всех
блоков; Поскольку мы записывали коэффициенты для блоков Rij (которые, как мы оговорили, в нашем частном случае являются квадратами одинакового размера) последовательно, то получается, что мы последовательно заполняем изображение по квадратам сетки разбиения использованием аффинного преобразования. Как можно подсчитать, количество операций на один пиксел изображения в градациях серого при восстановлении необычайно мало (N операций “+”, 1 операций “* ”, где N — количество итераций, т.е. 7-16). Благодаря этому, декомпрессия изображений для фрактального алгоритма проходит быстрее декомпрессии, например, для алгоритма JPEG, в котором на точку приходится (при оптимальной реализации операций обратного ДКП и квантования) 64 операции “+” и 64 операции “? ” (без учета шагов RLE и кодирования по Хаффману!). При этом для фрактального алгоритма умножение происходит на рациональное число, одно для каждого блока. Это означает, что мы можем, во-первых, использовать целочисленную рациональную арифметику, которая существенно быстрее арифметики с плавающей точкой. Во-вторых, умножение вектора на число — более простая и быстрая операция, часто закладываемая в архитектуру процессора (процессоры SGI, Intel MMX...), чем скалярное произведение двух векторов, необходимое в случае JPEG. Для полноцветного изображения ситуация качественно не изменяется, поскольку перевод в другое цветовое пространство используют оба алгоритма. Оценка потерь и способы их регулирования При кратком изложении упрощенного варианта алгоритма были пропущены многие важные вопросы. Например, что делать, если алгоритм не может подобрать для какого-либо фрагмента изображения подобный ему? Достаточно очевидное решение — разбить этот фрагмент на более мелкие, и попытаться поискать для них. В то же время понятно, что эту процедуру нельзя повторять до бесконечности, иначе количество необходимых преобразований станет так велико, что алгоритм перестанет быть алгоритмом компрессии. Следовательно, мы допускаем потери в какой-то части изображения. Для фрактального алгоритма компрессии, как и для других алгоритмов сжатия с потерями, очень важны механизмы, с помощью которых можно будет регулировать степень сжатия и степень потерь. К настоящему времени разработан достаточно большой набор таких методов. Во-первых, можно ограничить количество аффинных преобразований, заведомо обеспечив степень сжатия не ниже фиксированной величины. Во-вторых, можно потребовать, чтобы в ситуации, когда разница между обрабатываемым фрагментом и наилучшим его приближением будет выше определенного порогового значения, этот фрагмент дробился обязательно (для него обязательно заводится несколько “линз”). В-третьих, можно запретить дробить фрагменты размером меньше, допустим, четырех точек. Изменяя пороговые значения и приоритет этих условий, мы будем очень гибко управлять коэффициентом компрессии изображения в диапазоне от побитового соответствия до любой степени сжатия. Заметим, что эта гибкость будет гораздо выше, чем у ближайшего “конкурента” — алгоритма JPEG. Коэффициенты компрессии: 2-2000 (Задается пользователем). Класс изображений: Полноцветные 24 битные изображения или изображения в градациях серого без резких переходов цветов (фотографии). Желательно, чтобы области большей значимости (для восприятия) были более контрастными и резкими, а области меньшей значимости — неконтрастными и размытыми. Симметричность: 100-100000 Характерные особенности: Может свободно масштабировать изображение при разархивации, увеличивая его в 2-4 раза без появления “лестничного эффекта”. При увеличении степени компрессии появляется “блочный” эффект на границах блоков в изображении. |
--
В первой, как легко догадаться, будет храниться уменьшенная копия изображения. Во второй — усредненные разности пар значений пикселов по горизонтали. В третьей — усредненные разности пар значений пикселов по вертикали. В четвертой — усредненные разности значений пикселов по диагонали. По аналогии с двумерным случаем мы можем повторить наше преобразование и получить вместо первой матрицы 4 матрицы размером 128х128. Повторив наше преобразование в третий раз, мы получим в итоге: 4 матрицы 64х64, 3 матрицы 128х128 и 3 матрицы 256х256. На практике при записи в файл, значениями, получаемыми в последней строке (), обычно пренебрегают (сразу получая выигрыш примерно на треть размера файла — 1- 1/4 - 1/16 - 1/64...). К достоинствам этого алгоритма можно отнести то, что он очень легко позволяет реализовать возможность постепенного “прояв–ления” изображения при передаче изображения по сети. Кроме того, поскольку в начале изображения мы фактически храним его уменьшенную копию, упрощается показ “огрубленного” изображения по заголовку. В отличие от JPEG и фрактального алгоритма данный метод не оперирует блоками, например, 8х8 пикселов. Точнее, мы оперируем блоками 2х2, 4х4, 8х8 и т.д. Однако за счет того, что коэффициенты для этих блоков мы сохраняем независимо, мы можем достаточно легко избежать дробления изображения на “мозаичные” квадраты. Коэффициенты компрессии: 2-200 (Задается пользователем). Класс изображений: Как у фрактального и JPEG. Симметричность: ~1.5 Характерные особенности: Кроме того, при высокой
степени сжатия изображение распадается на отдельные блоки.
|
Заключение
В заключение рассмотрим таблицы, в которых сводятся воедино параметры различных алгоритмов сжатия изображений, рассмотренных нами выше. |
Алгоритм | Особенности изображения, за счет которых происходит сжатие |
RLE | Подряд идущие одинаковые цвета: 2 2 2 2 2 2 15 15 15 |
LZW | Одинаковые подцепочки: 2 3 15 40 2 3 15 40 |
Хаффмана | Разная частота появления цвета: 2 2 3 2 2 4 3 2 2 2 4 |
CCITT-3 | Преобладание белого цвета в изображении, большие области, заполненные одним цветом |
Рекурсивный | Плавные переходы цветов и отсутствие резких границ |
JPEG | Отсутствие резких границ |
Фрактальный | Подобие между элементами изображения |
|
|
|
ориентирован |
|
|
RLE | 32, 2, 0.5 |
|
3,4-х битные |
|
|
LZW | 1000, 4, 5/7 |
|
1-8 битные |
|
|
Хаффмана | 8, 1.5, 1 |
|
8 битные |
|
|
CCITT-3 | 213(3), 5, 0.25 |
|
1-битные |
|
|
JBIG | 2-30 раз |
|
1-битные |
|
|
Lossless JPEG | 2 раза |
|
24-битные, серые |
|
|
JPEG | 2-20 раз |
|
24-битные, серые |
|
|
Рекурсивное сжатие | 2-200 раз |
|
24-битные, серые |
|
|
Фрактальный | 2-2000 раз |
|
24-битные, серые |
|
|
В приведенной таблице отчетливо видны тенденции развития алгоритмов графики последних лет:
|
Различия
между форматом и алгоритмом
Дополнительный раздел Напоследок несколько замечаний относительно разницы в терминологии, путаницы при сравнении рейтингов алгоритмов и т.п. Посмотрите на краткий перечень форматов, достаточно часто используемых на PC, Apple и UNIX платформах: ADEX, Alpha Microsystems BMP, Autologic, AVHRR, Binary Information File (BIF), Calcomp CCRF, CALS, Core IDC, Cubicomp PictureMaker, Dr. Halo CUT, Encapsulated PostScript, ER Mapper Raster, Erdas LAN/GIS, First Publisher ART, GEM VDI Image File, GIF, GOES, Hitachi Raster Format, PCL, RTL, HP-48sx Graphic Object (GROB), HSI JPEG, HSI Raw, IFF/ILBM, Img Software Set, Jovian VI, JPEG/JFIF, Lumena CEL, Macintosh PICT/PICT2, MacPaint, MTV Ray Tracer Format, OS/2 Bitmap, PCPAINT/Pictor Page Format, PCX, PDS, Portable BitMap (PBM), QDV, QRT Raw, RIX, Scodl, Silicon Graphics Image, SPOT Image, Stork, Sun Icon, Sun Raster, Targa, TIFF, Utah Raster Toolkit Format, VITec, Vivid Format, Windows Bitmap, WordPerfect Graphic File, XBM, XPM, XWD. В оглавлении вы можете видеть список алгоритмов компрессии. Единственным совпадением оказывается JPEG, а это, согласитесь, не повод, чтобы повсеместно использовать слова “формат” и “алгоритм компрессии” как синонимы (что, увы, я постоянно наблюдаю). Между этими двумя множествами нет взаимно однозначного соответствия. Так, различные модификации алгоритма RLE реализованы в огромном количестве форматов. В том числе в TIFF, BMP, PCX. И, если в определенном формате какой-либо файл занимает много места, это не означает, что плох соответствующий алгоритм компрессии. Это означат, зачастую лишь то, что реализация алгоритма, использованная в этом формате, дает для данного изображения плохие результаты. Не более того. (См. примеры в приложении.) В то же время многие современные форматы поддерживают запись с использованием нескольких алгоритмов архивации либо без использования архивации. Например, формат TIFF 6.0 может сохранять изображения с использованием алгоритмов RLE-PackBits, RLE-CCITT, LZW, Хаффмана с фиксированной таблицей, JPEG, а может сохранять изображение без архивации. Аналогично форматы BMP и TGA позволяют сохранять файлы как с использованием алгоритма компрессии RLE (разных модификаций!), так и без использования оной. Всегда полезно помнить, что на размер файла оказывают существенное влияние большое количество параметров (вариант реализации алгоритма, параметры алгоритма (как внутренние, так и задаваемые пользователем), порядок цветов в палитре и многое другое). Например, для абсолютно черного изображения 1000х1000х256 градаций серого в формате JPEG с помощью одной программы при различных параметрах всегда получался файл примерно в 7 килобайт. В то же время, меняя опции в другой программе, я получил файлы размером от 4 до 68 Кб (всего-то на порядок разницы). При этом декомпрессированное изображение для всех файлов было одинаковым — абсолютно черный квадрат (яркость 0 для всех точек изображения). Дело в том, что даже для простых форматов одно и то же изображение в одном и том же формате с использованием одного и того же алгоритма архивации можно записать в файл несколькими корректными способами. Для сложных форматов и алгоритмов архивации возникают ситуации, когда многие программы сохраняют изображения разными способами. Такая ситуация, например, сложилась с форматом TIFF (в силу его большой гибкости). Долгое время по-разному сохраняли изображения в формат JPEG, поскольку соответствующая группа ISO (Международной Организации по Стандартизации) подготовила только стандарт алгоритма, но не стандарт формата. Сделано так было для того, чтобы не вызывать “войны форматов”. Абсолютно противоположное положение сейчас с фрактальной компрессией, поскольку есть стандарт “де-факто” на сохранение фрактальных коэффициентов в файл (стандарт формата), но алгоритм их нахождения (быстрого нахождения!) является технологической тайной создателей программ-компрессоров. В результате для вполне стандартной программы-декомпрессора могут быть подготовлены файлы с коэффициентами, существенно различающиеся как по размеру, так и по качеству получающегося изображения. Приведенные примеры показывают, что встречаются ситуации, когда алгоритмы записи изображения в файл в различных программах различаются. Однако гораздо чаще причиной разницы файлов являются разные параметры алгоритма. Как уже говорилось, многие алгоритмы позволяют в известных пределах менять свои параметры, но не все программы позволяют это делать пользователю. |
Литература
Литература по алгоритмам сжатия [2] B.Smith, L.Rowe “Algorithm for manipulating compressed images.” // Computer Graphics and applications. September 1993. [3] A.Jacquin “Fractal image coding based on a theory of iterated contractive image transformations” // Visual Comm. and Image Processing, vol. SPIE-1360, 1990. [4] Y.Fisher “Fractal image compression” // SigGraph-92. [5] “Progressive Bi-level Image Compression, Revision 4.1” // ISO/IEC JTC1/SC2/WG9, CD 11544, September 16, 1991. [6] W.B.Pennebaker J.L. Mitchell, G.G. Langdon, R.B. Arps, “An overview of the basic principles of the Q-coder adaptive binary arithmetic coder” // IBM Journal of research and development, Vol.32, No.6, November 1988, pp. 771-726. [7] D.A.Huffman “A method for the construction of minimum redundancy codes.” // Proc. of IRE val.40 1962 pp. 1098-1101. [8] Standardisation of Group 3 Facsimile apparatus for document transmission. CCITT Recommendations. Fascicle VII.2. T.4. 1980. [9] С.В.Яблонский “Введение в дискретную математику”. // М. “Наука”, 1986. Раздел “Теория кодирования”. [10] А.С.Климов “Форматы графических файлов”. // С.-Петербург, Изд. “ДиаСофт” 1995. [11] Д.С.Ватолин “Сжатие статических изображений” // Открытые системы сегодня. Номер 8 (29) Апрель 1995 [12] Д.С.Ватолин “MPEG - стандарт ISO на видео в системах мультимедиа” // Открытые системы. Номер 2. Лето 1995 [13] Д.С.Ватолин “Применение фракталов в машинной графике” // ComputerWorld-Россия. Номер 15. 12 декабря 1995 [14] Д.С.Ватолин “Тенденции развития алгоритмов архивации графики” // Открытые системы. Номер 4. Зима 1995 [15] Д.С.Ватолин “Фрактальное сжатие изображений” // ComputerWorld-Россия. Номер 6 (23). 20 февраля 1996 [16] Д.С.Ватолин “Использование графики в WWW” // ComputerWorld-Россия. Номер 15 (32). 23 апреля 1996 [18] В.Ю.Романов “Популярные форматы файлов для хранения графических изображений на IBM PC” // Москва “Унитех”, 1992 [19] Том Сван “Форматы файлов Windows” // М. “Бином”, 1995 [20] E.Hamilton “JPEG File Interchange Format” // Version 1.2. September 1, 1992, San Jose CA: C-Cube Microsystems, Inc. [21] Aldus Corporation Developer’s Desk. “TIFF - Revision 6.0, Final”, June 3, 1992 |
Приложение. Таблицы сравнения алгоритмов
Архивация двуцветного изображения |
|
|
125.000 байт |
|
Ниже приведена степень компрессии изображений в зависимости от применяемого алгоритма:
Алгоритм RLE | Алгоритм LZW | CCITT Group 3 |
CCITT Group 4 | |
Без помех | 10,6 (TIFF-CCITT RLE)
6,6 (TIFF-PackBits) 4,9 (PCX) 2,99 (BMP) 2,9 (TGA) |
12 (TIFF-LZW)
10,1 (GIF) |
9,5 (TIFF) | 31,2 (TIFF) |
С
помехами |
5 (TIFF-CCITT RLE)
2,49 (TIFF-PackBits) 2,26 (PCX) 1,7 (TGA) 1,69 (BMP) |
5,4 (TIFF-LZW)
5,1 (GIF) |
4,7 (TIFF) | 5,12 (TIFF) |
Выводы, которые можно сделать, анализируя данную таблицу:
|
Ниже приведена степень компрессии изображений в зависимости от применяемого алгоритма:
Выводы, которые можно сделать, анализируя данную таблицу: Не смотря на то, что данное изображение относится к классу изображений, на которые ориентирован алгоритм RLE (отвечает критериям “хорошего” изображения для алгоритма RLE), заметно лучшие результаты для него дает более универсальный алгоритм LZW.
|
|
|
(с) А.Андреев. Рисунок к роману Сергея Лукьяненко, "Лабиринт отражений"
|
|
Алгоритм RLE | Алгоритм LZW | Алгоритм JPEG | |
Оригинал | 0,99 (TIFF-PackBits)
0,98 (TGA) 0,88 (BMP) 0,74 (PCX) |
0,976 (TIFF-LZW) 0,972 (GIF) |
7,8 (JPEG q=10)
3,7 (JPEG q=30) 2,14 (JPEG q=100) |
После
обработки |
2,86 (TIFF-PackBits)
2,8 (TGA) 0,89 (BMP) 0,765 (PCX) |
3,02 (TIFF-LZW) 0,975 (GIF)* |
6,9 (JPEG q=10)
3,7 (JPEG q=30) 2,4 (JPEG q=100) |
* Для формата GIF в этом случае можно получить
изображение меньшего размера используя дополнительные параметры.
|
Алгоритм RLE | Алгоритм LZW | Алгоритм JPEG | |
Первое
изображение |
1,046 (TGA) 1,037 (TIFF-PackBits) |
1,12 (TIFF-LZW)
4,65 (GIF) |
47,2 (JPEG q=10)
23,98 (JPEG q=30) 11,5 (JPEG q=100) |
Выводы, которые можно сделать, анализируя
таблицу:
|
320х320хRGB — 307.200 байт |
Сжатие в 100 раз JPEG (3.08Кb) |
Сжатие в 100 раз (3.04Кb) |
Сжатие в 100 раз (3.04Кb) wavelet алгоритмом |
На данном примере хорошо видно, что при высоких степенях компрессии алгоритм JPEG оказывается полностью неконкурентоспособным. Также хорошо видны артефакты, вносимые в изображение всеми алгоритмами. Качество изображения для фрактального алгоритма визуально несколько ниже, однако для него не используется постобработка изображения (достаточно “разумное” сглаживание), из-за которого у волнового алгоритма размываются мелкие детали изображения. |
Приложение:
Апплет, обеспечивающий фрактальную декомпрессию
Апплет написан Константином Храпченко в рамках дипломной работы, написан на языке Java и осуществляет распаковку изображения в реальном времени любым броузером, поддерживающим Java. Достоинства такого подхода:
Этот пример тестировался на Internet Explorer 4.0, 5.0, Netscape Communicator 4.0, 4.5. Если вы не увидите изоражений то возможно у вас
выключена поддержка Java, либо стоит попробовать другой броузер
(апплет не является коммерческим и полномасштабного тестирования не
проходил). И еще - зеркальное отражение изображения - это
задокументированная ошибка. ;) |
Ссылки на ресурсы
по сжатию изображений в сети
Информация на русском:
Информация на английском:
|
Алгоритмы cжатия изображений
Содержание
(с) 1999 Лаборатория Компьютерной Графики ВМиК МГУ им. М.В. Ломоносова |